/*
 * Copyright:  2018 smarabbit studio.
 *
 *  Licensed under the Confluent Community License; you may not use this file
 *  except in compliance with the License.  You may obtain a copy of the License at
 *
 *  http://www.confluent.io/confluent-community-license
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 *  WARRANTIES OF ANY KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations under the License.
 *
 *  @作   者： 黄开晖 (117227773@qq.com)
 *  @日   期:  2020年9月12日
 */
package com.massyframework.beanskin.service.awaitstrategy;

import java.util.function.Consumer;

import com.massyframework.beanskin.service.ServiceRepository;

/**
 * 等待策略构建器
 * 
 * <p>
 * 等待策略构建器为满足只有当某些服务存在时才能执行的操作,等待策略允许设置所依赖的服务和当服务满足时的消费行为。
 * 系统会自动在服务满足情况下，执行消费性为恶。
 * 
 * @author huangkh
 *
 */
public interface AwaitStrategyBuilder {
	
	/**
	 * 添加依赖服务
	 * 
	 * <p>
	 * 当需要其他服务存在才能执行的，在此添加所依赖的外部服务。
	 * @param requiredType {@link Class},依赖服务的类型
	 */
	AwaitStrategyBuilder addDependencyService(Class<?> requiredType);
		
	/**
	 * 添加依赖服务
	 * 
	 * <p>
	 * 当需要其他服务存在才能执行的，在此添加所依赖的外部服务。
	 * 
	 * @param requiredType {@link Class}, 依赖服务的类型
	 * @param filterString {@link String}, 依赖服务的过滤条件
	 */
	AwaitStrategyBuilder addDependencyService(Class<?> requiredType, String filterString);
	
	/**
	 * 设置注册服务的行动
	 * @param value {@link Consumer}
	 * @return {@link AwaitStrategyBuilder}
	 */
	AwaitStrategyBuilder action(Consumer<ServiceRepository> value);
}
